from rest_framework import status
from rest_framework.generics import GenericAPIView, CreateAPIView
from rest_framework.mixins import CreateModelMixin
from rest_framework.response import Response
from rest_framework.views import APIView
from users.models import User

# 用户名是否存在
# GET /usernames/(?P<username>\w{5,20})/count/
from users.serializers import UserSerializer


class UsernameCountView(APIView):
    def get(self, request, username):
        # 从数据库查询用户数据
        count = User.objects.filter(username=username).count()

        response_data = {
            'username': username,
            'count': count
        }
        # 返回应答
        return Response(response_data)


# 手机号是否存在
# GET /mobiles/(?P<mobile>1[3-9]\d{9})/count/
class MobileCountView(APIView):
    def get(self, request, mobile):
        count = User.objects.filter(mobile=mobile).count()

        response_data = {
            'mobile': mobile,
            'count': count
        }

        return Response(response_data)


# 用户注册信息的保存
# POST /users/
# class UserView(APIView):
#     def post(self, request):
#         """
#         用户注册信息的保存
#         1、获取用户信息 进行校验 （手机号是否已注册、手机号格式、参数完整行、是否同意协议、两次密码是否一致、短信验证码是否正确）
#         2、创建新用户 并保存数据库
#         3、返回应答，注册成功
#         """
#         # 1、获取用户信息进行校验
#         serializer = UserSerializer(data=request.data)
#         serializer.is_valid(raise_exception=True)
#         # 2、创建新用户并保存数据库
#         serializer.save()
#         # 3、返回应答，注册成功
#         return Response(serializer.data, status=status.HTTP_201_CREATED)

# 升级1
# class UserView(GenericAPIView):
#     serializer_class = UserSerializer
#
#     def post(self, request):
#         """
#         用户注册信息的保存
#         1、获取用户信息 进行校验 （手机号是否已注册、手机号格式、参数完整行、是否同意协议、两次密码是否一致、短信验证码是否正确）
#         2、创建新用户 并保存数据库
#         3、返回应答，注册成功
#         """
#         # 1、获取用户信息进行校验
#         serializer = self.get_serializer(data=request.data)
#         serializer.is_valid(raise_exception=True)
#         # 2、创建新用户并保存数据库
#         serializer.save()
#         # 3、返回应答，注册成功
#         return Response(serializer.data, status=status.HTTP_201_CREATED)

# 升级2
# class UserView(CreateModelMixin,GenericAPIView):
#     serializer_class = UserSerializer
#
#     def post(self, request):
#         """
#         用户注册信息的保存
#         1、获取用户信息 进行校验 （手机号是否已注册、手机号格式、参数完整行、是否同意协议、两次密码是否一致、短信验证码是否正确）
#         2、创建新用户 并保存数据库
#         3、返回应答，注册成功
#         """
#         return self.create(request)

# 升级3  用户注册信息保存
class UserView(CreateAPIView):
    serializer_class = UserSerializer


# jwt机制中已经提供了一个登录方法obtain_jwt_token